package cn.stronglink.asset.module.dam.service;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import cn.stronglink.asset.message.mq.dam.RealTimeDatasMsgReceiver;
import cn.stronglink.asset.model.SensorSetting;
import cn.stronglink.asset.module.dam.entity.dev.RackInfo;
import cn.stronglink.asset.module.dam.entity.message.MsgRealTimeDatas;
import cn.stronglink.asset.module.dam.interfaces.RealtimeDatasHandleStrategyI;
import cn.stronglink.asset.module.dam.mapper.DamSensorMapper;
import cn.stronglink.asset.module.dam.utils.dataJsonUtils.realtime.receive.ListContainerUtil;
import cn.stronglink.asset.module.dam.utils.dataJsonUtils.realtime.send.Send6WidgetMsgUtil;
import cn.stronglink.asset.module.dam.utils.dataJsonUtils.realtime.send.SendUtil;
import cn.stronglink.asset.module.dam.utils.dataJsonUtils.req.send.TestCmdFormatUtil;
import cn.stronglink.asset.module.dam.utils.factorys.common.FactoryBatchUpdate;
import cn.stronglink.asset.module.dam.utils.factorys.common.FactoryUpdateSingleWidget;

@Component("toDamCmd6Service")
public class RealTimeSendCmdToDam implements RealtimeDatasHandleStrategyI {
	// 共6个传感器实时数据 + 2个list存放sensro温湿度 + 2个list存放cabinet门数据
	public static final int sensorCount = 7;
	private ListContainerUtil listContainer = new ListContainerUtil(sensorCount);

	@Autowired
	private DamSensorMapper damSensorMapper;

	public   void handleDamDatas(MsgRealTimeDatas realDatas) {
		// 发送指令
		listContainer.clearAllSensor();// 清空容器
		
		SensorSetting[] senList = realDatas.getAwsPostdata().getSensorList();// 解析数据后: 保存该数据
		RackInfo rackinfo = damSensorMapper.getRackInfo(realDatas.getAwsPostdata().getRackConverCode());
		long rackId = rackinfo.getRackId();

		// 查询传感器信息： 是否已存在
		if (rackId != 0) {// 存在该机柜,更新数据
			for (SensorSetting sen : senList) {
				sen.setAssetId(rackId);// 获取sensorType: 判断是哪个传感器的数据

				// 根据position, type 分开数据
				int position=sen.getSensorPosition();
				if(sen.getSensorType() != 3 && position<7) {
					Object[] objs= listContainer.getSensorPositions();
					//int index=position>=objs.length?objs.length-1:position-1;
					
					List<SensorSetting> sensors=(List<SensorSetting>) objs[position-1];
					sensors.add(sen);
				}
			} // for结束
			
			//Send6WidgetMsgUtil.sendMsg(realDatas, listContainer);
			Map<Integer,String> params=Send6WidgetMsgUtil.get6WidgetCommand(listContainer);
			
			// 第7个控件：机柜名称---数据指令
			params.put(7, rackinfo.getRackName());
			
			// 第8个控件：更新时间---数据指令（年月日时分秒）
			String time=new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒").format(new Date());
			params.put(8,time);
			
			// 第9个控件：机柜编号---数据指令
			params.put(9, rackinfo.getRackNo());
			
			// 第10控件：门状态数据指令
			// 第11个控件：资产使用情况数据指令
			StringBuilder data11=new StringBuilder();
			data11.append(rackinfo.getUsedU());
			data11.append("/");
			data11.append(rackinfo.getTotalU());
			params.put(11, data11.toString());
			
			//调用工厂：批量更新     发送指令
			String cmds=FactoryBatchUpdate.updateTotalScreen(1, params);
			SendUtil.sendRealTimeDatas( realDatas, cmds);
			TestCmdFormatUtil.changeAndPrint(cmds);
			
		} else {
			System.out.println("查询..无此机柜, 无效的rackConverCode");
		}
	}

	@Override
	public boolean isHandle(MsgRealTimeDatas realDatas) {
		SensorSetting[] senArr = realDatas.getAwsPostdata().getSensorList();

		for (SensorSetting sen : senArr) {
			if (sen.getSensorType() != 3) {// 判断温湿度表
				return true;
			}
		}
		return false;
	}
}
